package taptap

import "fmt"

/*
taptap爬虫的基础方法定义
*/

const (
	// XUa 在请求taptap的api的时候需要作为请求参数X-UA传入, 否则请求会失败
	XUa = "V%3D1%26PN%3DWebApp%26LANG%3Dzh_CN%26VN_CODE%3D4%26VN%3D0.1.0%26LOC%3DCN%26PLT%3DPC%26DS%3DAndroid%26DT%3DPC"

	taptapBaseUrl = "https://www.taptap.com" // taptap baseUrl

	topStartUri = "/webapiv2/app-top/v1/hits?platform=android&type_name=hot&limit=15&from=0" // 游戏top榜单起始uri

	detailBaseUrl = "https://www.taptap.com/webapiv2/app/v2/detail-by-id" // 游戏详情baseUrl

	reviewBaseUri = "/webapiv2/review/v2/by-app" // 游戏评论baseUrl
)

// taptapTopResp TapTap排行榜请求的响应
type taptapTopResp struct {
	Success bool `json:"success"`
	Data    struct {
		List []struct {
			Id int `json:"id"`
		} `json:"list"`
		PrevPage string `json:"prev_page"`
		NextPage string `json:"next_page"`
		Total    int    `json:"total"`
	} `json:"data"`
	Now int `json:"now"`
}

// taptapGameDetail taptap游戏详情类型
type taptapGameDetail struct {
	Success bool `json:"success"`
	Data    struct {
		Id          int      `json:"id"`          // taptap的唯一id
		Title       string   `json:"title"`       // 游戏名称
		Hints       []string `json:"hints"`       // 游戏提示
		UpdateDate  string   `json:"update_date"` // 更新时间
		Developers []struct {
			Id      int    `json:"id"`
			Type    string `json:"type"`
			Label   string `json:"label"`
			Name    string `json:"name"`
			Website string `json:"website"`
		} `json:"developers"` // 开发者信息
		Description struct {
			Text string `json:"text"`
		} `json:"description"` // 介绍
		Banner struct {
			Width       uint   `json:"width"`        // 宽度
			Height      uint   `json:"height"`       // 高度
			MediumUrl   string `json:"medium_url"`   // 缩略图链接
			OriginalUrl string `json:"original_url"` // 原图链接
		} `json:"banner"` // 横幅图
		Stat struct {
			HitsTotal uint `json:"hits_total"` // 下载量
			PlayTotal uint `json:"play_total"` // 游玩量
			FansCount uint `json:"fans_count"` // 收藏/粉丝量
		} `json:"stat"` // 游戏状态信息
		Icon struct {
			MediumUrl   string `json:"medium_url"`
			OriginalUrl string `json:"original_url"`
			Width       uint   `json:"width"`
			Height      uint   `json:"height"`
		} `json:"icon"` // 游戏图标
		Download struct {
			ApkId uint `json:"apk_id"`
			Apk   struct {
				Name        string `json:"name"`
				Size        uint   `json:"size"`
				VersionCode int    `json:"version_code"`
				VersionName string `json:"version_name"`
			} `json:"apk"` // apk包的详细信息
		} `json:"download"`
		Screenshots []struct {
			MediumUrl   string `json:"medium_url"`
			OriginalUrl string `json:"original_url"`
			Width       uint   `json:"width"`
			Height      uint   `json:"height"`
		} `json:"screenshots"` // 游戏展示截图
		Tags []struct {
			Id     int    `json:"id"`
			Value  string `json:"value"`
			Uri    string `json:"uri"`
			WebUrl string `json:"web_url"`
		} `json:"tags"` // 标签
		Whatsnew struct {
			Text string `json:"text"`
		} `json:"whatsnew"` // 更新信息

	} `json:"data"`
}

// taptapGameReview taptap游戏评论
type taptapGameReview struct {
	Success bool `json:"success"`
	Data    struct {
		List []struct {
			Moment struct {
				CreatedTime     int  `json:"created_time"` // 创建时间
				EditedTime      int  `json:"edited_time"` // 修改时间
				Author struct {
					User struct {
						Id           int    `json:"id"`            // 用户taptap的唯一id
						Name         string `json:"name"`          // 用户名
						Avatar       string `json:"avatar"`        // 用户头像
						MediumAvatar string `json:"medium_avatar"` // 用户头像缩略图
						Gender       string `json:"gender"`        // 用户性别, ""-未填写, "female"-女, "male"-男
						Intro        string `json:"intro"`         // 用户个人介绍
					} `json:"user"`
				} `json:"author"`
				ExtendedEntities struct {
					Reviews []struct {
						Score      int    `json:"score"`       // 评分
						Device     string `json:"device"`      // 设备
						PlayedTips string `json:"played_tips"` // 游戏时长
						Contents   struct {
							Text    string `json:"text"`     // html格式的评论内容
							RawText string `json:"raw_text"` // 带有转义字符的评论内容
						} `json:"contents"`
						Ups   int `json:"ups"`   // 赞
						Downs int `json:"downs"` // 踩
					} `json:"reviews"`
				} `json:"extended_entities"`
			} `json:"moment"`
		} `json:"list"`
		PrevPage string `json:"prev_page"` // 上一页uri
		NextPage string `json:"next_page"` // 下一页uri
		Total    int    `json:"total"`     // 总数
	} `json:"data"`
}

// genTopUrl 生成游戏TOP150的下一个Url
func genTopUrl(next string) string {
	return fmt.Sprintf("%s%s&X-UA=%s", taptapBaseUrl, next, XUa)
}

// genDetailUrl 生成获取游戏详情的Url
func genDetailUrl(taptapId int) string {
	return fmt.Sprintf("%s/%d?X-UA=%s", detailBaseUrl, taptapId, XUa)
}

// genReviewUrl 生成获取游戏评论的Url
func genReviewUrl(next string) string {
	return fmt.Sprintf("%s%s&X-UA=%s", taptapBaseUrl, next, XUa)
}

// genReviewStartUri 生成获取游戏评论第一页的Uri, 注意只是生成uri, 还需要结合genReviewUrl()函数使用
func genReviewStartUri(taptapId int) string {
	return fmt.Sprintf("%s?app_id=%v&limit=10&mainRequest=true", reviewBaseUri, taptapId)
}
